# [钛妹]: 基础不牢谈何AI？今天钛妹又学习了Python的*args，欢迎大神们指正错误！

# [钛妹]: 钛哥钛哥，最近我在学Python函数，遇到一个 *args，感觉有点懵，你能给我讲讲这是啥不？
def introduce_args(name, *args):
    # [钛哥]: 没问题！钛妹，*args 这东西其实挺有意思的，它允许你的函数接收任意数量的参数，就像一个魔法口袋！你看这个函数，除了name，后面跟了个 *args，这是啥意思呢？
    print(f"大家好，我是 {name}!")
    # [钛妹]: 任意数量的参数？魔法口袋？听起来好厉害，但是还是有点抽象，能更具体点吗？
    print("我的朋友们有:")
    # [钛哥]:  当然！*args 其实就是一个约定俗成的名字，星号 * 才是关键。它告诉 Python，这个函数要接收一堆**非关键字**参数，然后把它们打包成一个叫 `args` 的**元组 (tuple)** 给你用。
    for friend in args:
        # [钛妹]: 元组？我知道元组，就是不可变的列表嘛！那这个 `args` 元组里面装的就是传进来的朋友的名字咯？
        print(f"- {friend}")

introduce_args("钛妹", "小红", "小明", "小刚", "小丽")
# [钛哥]:  没错！你看，我调用 `introduce_args` 的时候，除了名字 "钛妹"，后面加了一堆朋友的名字，这些名字就被 *args  打包到 `args` 元组里了。运行一下看看效果？
# 运行结果：
# 大家好，我是 钛妹!
# 我的朋友们有:
# - 小红
# - 小明
# - 小刚
# - 小丽

# [钛妹]:  哇！真的可以传这么多名字进去，而且都打印出来了！那如果我不传朋友的名字，会怎么样呢？
introduce_args("钛妹")
# [钛哥]:  不传名字也没问题！如果 *args  没有接收到额外的参数，那 `args`  就是一个空元组。再运行一下试试？
# 运行结果：
# 大家好，我是 钛妹!
# 我的朋友们有:

# [钛妹]:  嗯嗯，这次 "我的朋友们有:" 后面就啥也没打印了，我明白了！*args  真是太方便了，这样函数就可以灵活地接收不同数量的参数了！
# [钛哥]:  是滴！总结一下，*args  就是用来接收**不定数量**的**非关键字**参数，并把它们放到一个**元组**里。在函数内部，你就可以像操作元组一样操作这些参数啦！

# [钛妹]: 好啦，这期内容到此结束，你是不是感觉又进步了一点点？点赞关注不迷路！
print("好啦，这期内容到此结束，你是不是感觉又进步了一点点？点赞关注不迷路！")